/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ia1_practica3;

import javax.swing.JLabel;

/**
 *
 * @author Edson Salazar
 */
public class Casilla extends JLabel {
    
    /*
     * Estado para una etiqueta vacía (color blanco)
     */
    final static int EST_VACIA = 0;
    /**
     * Estado para una etiqueta vacía, propuesta de movimiento
     */
    final static int EST_VACIAPRESS = 1;
    /**
     * Estado para una ficha del jugador 1
     */
    final static int EST_JUGADOR1 = 2;
    final static int EST_JUGADOR1PRESS = 3;
    final static int EST_JUGADOR2 = 4;
    final static int EST_JUGADOR2PRESS = 5;
    final static int EST_NULA = 10;
    final static int EST_NULAANGOSTA = 11;
    
    /**
     * Numero de pixeles que tendrá la casilla (dimensión x dimensión)
     */
    private Integer dimension = 26;
    /**
     * El tipo de casilla indicará el color que esta tendrá de forma gráfica<br />
     * 0: Casilla vacía<br />
     * 1: Casilla vacía seleccionada<br />
     * 2: Casilla jugador 1 vacía<br />
     * 3: Casilla jugador 1 seleccionada<br />
     * 4: Casilla jugador 2 vacía<br />
     * 5: Casilla jugador 2 seleccionada<br />
     * 10: Casilla vacía (sin imagen)<br />
     * 11: Casilla vacía (sin imagen) en medio de las fichas (mas angosta)<br />
     */
    private Integer tipoCasilla = 0;
    
    private int columna;
    private int fila;
    
    public Casilla(){
        super();
        inicializar();
        tipoCasilla = 0;
        cambiarImagen(0);
    }
    
    
    /**
     * El tipo de casilla indicará el color que esta tendrá de forma gráfica<br />
     * 0: Casilla vacía<br />
     * 1: Casilla vacía seleccionada<br />
     * 2: Casilla jugador 1 vacía<br />
     * 3: Casilla jugador 1 seleccionada<br />
     * 4: Casilla jugador 2 vacía<br />
     * 5: Casilla jugador 2 seleccionada<br />
     * 10: Casilla vacía (sin imagen)<br />
     * 11: Casilla vacía (sin imagen) en medio de las fichas (mas angosta)<br />
     * @param tipoCasilla Numero que indicara la imagen a colocar a la etiqueta
     */
    public Casilla(int tipoCasilla, int columna, int fila){
        super();
        inicializar();
        this.tipoCasilla = tipoCasilla;
        this.columna = columna;
        this.fila = fila;
        cambiarImagen(tipoCasilla);
    }
    public void cambioImg(){
        cambiarImagen(tipoCasilla);
    }
    private void cambiarImagen(int tipo){
        String ruta="/img/";
        switch(tipo){
            case EST_VACIA:
                ruta+="gris0.jpg";
                break;
            case EST_VACIAPRESS:
                ruta+="gris1.jpg";
                break;
            case EST_JUGADOR1:
                ruta+="rojo0.jpg";
                break;
            case EST_JUGADOR1PRESS:
                ruta+="rojo1.jpg";
                break;
            case EST_JUGADOR2:
                ruta+="azul0.jpg";
                break;
            case EST_JUGADOR2PRESS:
                ruta+="azul1.jpg";
                break;
            case EST_NULA:
                ruta = "";
                //this.setSize(20, dimension);
                break;
            case EST_NULAANGOSTA:
                //nula en medio de las fichas
                ruta = "";
                this.setSize(5, dimension);
                break;
            default:
                ruta+="gris0.jpg";
        }
        if(!ruta.isEmpty()){
            this.setIcon(new javax.swing.ImageIcon(getClass().getResource(ruta)));
        }
    }
    
    @SuppressWarnings("unchecked")
    private void inicializar(){
        this.setSize(dimension, dimension);
        this.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                etiquetaPresionada(evt);
            }
        });
    }
    
    private void etiquetaPresionada(java.awt.event.MouseEvent evt){
        //Si es una ficha de un jugador cambia de estado
        if(validarSeleccion()){
            //Si es par, entonces está vacía
            if(tipoCasilla%2==0){
                //Cambiando a una casilla llena
                tipoCasilla++;
                Main.getFormPrincipal().setCasillaSeleccionada(this);
            }else{
                tipoCasilla--;
                Main.getFormPrincipal().setCasillaSeleccionada(null);
                
            }
            this.setTipoCasilla(tipoCasilla);
        }else{
            if(Main.getFormPrincipal().getCasillaSeleccionada() != null){
                Main.getFormPrincipal().setCasillaSeleccionada(this);
            }
        }
        System.out.println("Etiqueta presionada, tipo= "+tipoCasilla);
        System.out.println("Columna--"+columna+"--fila"+fila);
    }
    
    private boolean validarSeleccion(){
        if(Main.getFormPrincipal().getCasillaSeleccionada()==null){
            return tipoCasilla > Casilla.EST_VACIAPRESS && Main.getFormPrincipal().esTurno(tipoCasilla);
        }else{
            return Main.getFormPrincipal().getCasillaSeleccionada()==this;
        }
    }

    public Integer getDimension() {
        return dimension;
    }

    public void setDimension(Integer dimension) {
        this.dimension = dimension;
    }

    public Integer getTipoCasilla() {
        return tipoCasilla;
    }

    public void setTipoCasilla(Integer tipoCasilla) {
        this.tipoCasilla = tipoCasilla;
        cambiarImagen(tipoCasilla);
    }

    public int getColumna() {
        return columna;
    }

    public void setColumna(int columna) {
        this.columna = columna;
    }

    public int getFila() {
        return fila;
    }

    public void setFila(int fila) {
        this.fila = fila;
    }
    
    
    
    
}
